
#ifndef _ROAxes3d_H_
#define _ROAxes3d_H_

#include <vtkAxesActor.h>
#include <vtkPolyData.h>
#include <vtkTransform.h>
#include <vtkRenderer.h>
#include <vtkTextProperty.h>
#include <vtkCaptionActor2D.h>
#include <vtkCamera.h>
#include <vtkTextActor.h>
#include <vtkProperty.h>
#include <vtkMapper.h>
#include <vtkMath.h>
#include "../OLApp/defines.hpp"
#include "ThreeDApi.hpp"

namespace NS3d {

	class _3DAPI ROAxes3d : public vtkAxesActor {
	public:
		static ROAxes3d* New();
		vtkTypeMacro(ROAxes3d, vtkAxesActor);

	public:
		void setTargetSize(double _size) { m_target = _size; };
		double getTargetSize() { return m_target; };
		void setPostion(double x, double y, double z);
	protected:
		ROAxes3d();
		~ROAxes3d() override = default;

		void Adjust(vtkViewport* viewport);
		int RenderOpaqueGeometry(vtkViewport* viewport) override;
		int RenderTranslucentPolygonalGeometry(vtkViewport* viewport) override;
		int RenderOverlay(vtkViewport* viewport) override;


	private:
		ROAxes3d(const ROAxes3d&) = delete;
		void operator=(const ROAxes3d&) = delete;

		double m_target;
		double m_postion[3]{ 0 };
		Sp(vtkTransform) m_original_transform;
	};

}

#endif // !_ROAxes3d_H_


